package cn.xyfmzmy.observer.demo;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 电视台，此处相当于消息总线，用于发布消息
 */
public class TVStation {

    // key：事件类型，value: 事件的监听者集合
    private Map<Class<? extends Event>,List<EventListener>> listenerMap = new HashMap<>();

    public void subscribe(EventListener listener,Class<? extends Event> eventClass){
        listenerMap.computeIfAbsent(eventClass, k -> new ArrayList<>()).add(listener);
    }

    public void publish(Event event){
        List<EventListener> eventListeners = listenerMap.get(event.getClass());
        if(eventListeners != null){
            eventListeners.forEach(listener -> listener.onEvent(event));
        }
    }

}
